package com.company.ljh.easy;
/**
 * 190.颠倒二进制位
 * 颠倒给定的 32 位无符号整数的二进制位。
 * 反转二进制位
 * 输入：n = 00000010100101000001111010011100
 * 输出：964176192 (00111001011110000010100101000000)
 * 解释：输入的二进制串 00000010100101000001111010011100 表示无符号整数 43261596，
 *      因此返回 964176192，其二进制表示形式为 00111001011110000010100101000000。
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/reverse-bits
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */

/**
 * @description:
 * @projectName:leet_code
 * @see:com.company.ljh.easy
 * @author:ljh
 * @createTime:2022/6/1 17:13
 * @version:1.0
 */
public class 颠倒二进制位 {
    //使用一个指针从右到左读取原来的数据，然后对新的数进行从左到右复写
    public int reverseBits(int n) {
        //用一个m来保存数据，进行数据颠倒
        int m = 0;
        int start = Integer.MIN_VALUE;
        for(int i =0 ;i < 32 ;i++){
            if((1 & n) == 0){
                //最后一位为0，则m当前位保持不变
            }else{
                m = m | start;
            }
            n = n >>>1;
            start = start >>>1;

        }
        return m;
    }
}
